from django.shortcuts import render, HttpResponse, redirect
from django.http import JsonResponse

from web.forms.project import ProjectModelForm
from web import models
from utils.tencent.cos import create_bucket

import time


def project_list(request):
    """ 项目管理列表 """
    # print(request.bug_platform.user)
    # print(request.bug_platform.price_policy)
    if request.method == 'GET':
        # GET请求查看项目列表
        """
        逻辑思维
        1，从数据库中获取数据【两个部分
                我创建的项目；包含星标和未星标
                我参与的项目：包含星标和未星标
        2，循环数据提取已星标的
                循环（我创建的项目）+（我参与的项目）把已星标的数据提取 <>
    
        得到三个列表【星标项目，我创建的项目，我参与的项目
        """
        # 得到三个列表【星标项目，我创建的项目，我参与的项目
        project_dict = {
            'star': [],  # 星标
            'my': [],  # 未星标
            'join': [],  # 用户参与的
        }
        # 我创建的项目；包含星标和未星标
        my_project_list = models.Project.objects.filter(creator=request.bug_platform.user)
        for row in my_project_list:
            if row.star:
                project_dict['star'].append({'value': row, 'type': 'my'})
            else:
                project_dict['my'].append(row)

        # 我参与的项目：包含星标和未星标
        join_project_list = models.ProjectUser.objects.filter(user=request.bug_platform.user)
        for item in join_project_list:
            if item.star:
                # 这里添加的是参与项目者的项目，不是参与者【因为要添加到同一个列表中，如果添加的是项目中，后面就要要判断
                project_dict['star'].append({'value': item.Project, 'type': 'join'})
            else:
                project_dict['join'].append(item.Project)

        form = ProjectModelForm(request)
        return render(request, 'project_list.html', {'form': form, 'project_dict': project_dict})

    # POST， 对话框的ajax请求添加项目
    form = ProjectModelForm(request, data=request.POST)
    if form.is_valid():  # form已添加了项目名，颜色，描述【 还需要加creator 创建者
        name = form.cleaned_data['name']  # 项目名
        # 1 为项目创建一个桶 & 跨域的规则
        # 桶名 '{项目名}-{用户手机号}-{时间}-1316848700'
        bucket = f"{name}-{request.bug_platform.user.mobile_phone}-{str(int(time.time()))}-1316848700"
        region = 'ap-chengdu'
        create_bucket(bucket, region)
        # 把桶和区域写入数据库

        # 2 创建项目
        # creator【创建者】  bucket region手动写入数据库
        form.instance.bucket = bucket
        form.instance.region = region
        form.instance.creator = request.bug_platform.user
        # 验证通过
        instance = form.save()  # 创建项目

        # 3 项目初始化问题类型 【默认
        issues_type_object_list = []
        for item in models.IssuesType.PROJECT_INIT_LIST:  # 任务，功能， bug
            issues_list = models.IssuesType(project=instance, title=item)
            issues_type_object_list.append(issues_list)
        # 批量添加
        models.IssuesType.objects.bulk_create(issues_type_object_list)

        return JsonResponse({'status': True})

    return JsonResponse({'status': False, 'error': form.errors})


def project_star(request, project_type, project_id):
    """ 星标项目 """
    if project_type == 'my':
        # 根据id找到项目后就更新star属性
        models.Project.objects.filter(id=project_id, creator=request.bug_platform.user).update(star=True)
        return redirect('project_list')

    if project_type == 'join':
        models.Project.objects.filter(project_id=project_id, creator=request.bug_platform.user).update(star=True)
        return redirect('project_list')

    return HttpResponse('请求失败')


def project_unstar(request, project_type, project_id):
    """ 取消星标 """
    if project_type == 'my':
        # 根据id找到项目后就更新star属性
        models.Project.objects.filter(id=project_id, creator=request.bug_platform.user).update(star=False)
        return redirect('project_list')

    if project_type == 'join':
        models.Project.objects.filter(project_id=project_id, creator=request.bug_platform.user).update(star=False)
        return redirect('project_list')

    return HttpResponse('请求失败')
